﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.IO;

namespace indicadores.Models
{
    public class Logs
    {
        private string log, tipo, caminho;

        public Logs(string log, string tipo)
        {
            this.log = log;
            this.tipo = tipo;
            Salvar();
        }
        private bool Verificar()
        {
            caminho = HttpContext.Current.Server.MapPath("~/Content/Logs");

            //Verifica se existe uma pasta de logs, se não existir a pasta será criada
            if (!System.IO.Directory.Exists(caminho))
                System.IO.Directory.CreateDirectory(caminho);
            bool limpo;

            //Verifica se existe um arquivo de logs

            caminho = HttpContext.Current.Server.MapPath("~/Content/Logs") + "/logs.csv";

            if (!System.IO.File.Exists(caminho))
                limpo = true;

            else
                limpo = false;

            //Se não existe um arquivo de logs, um arquivo é criado

            if (limpo)
                System.IO.File.Create(caminho).Close();

            return limpo;

        }
        private void Salvar()
        {

            bool limpo = Verificar();

            //Crio o StreamWriter (classe para gravar os dados)

            //que recebe como parâmetro a variável fs, referente ao FileStream criado anteriormente

            string arq = "";

            using (StreamReader sr = new StreamReader(caminho))
            {
                arq = sr.ReadToEnd();

                sr.Close();
            }

            using (StreamWriter sw = new StreamWriter(caminho))
            {
                if(limpo)
                    sw.Write("Descrição;Data;Hora;IP;Login;Operação"+sw.NewLine);
                //Uso o método Write para escrever algo em nosso arquivo texto
                string login = "Não identificado";
                try
                {
                    login = HttpContext.Current.User.Identity.Name;
                }
                catch
                {
                    login = "Não Encontrado";
                }

                //Aqui uma nova linha é escrita.
                sw.WriteLine(arq+log.Replace(";", ":").Replace(" ","_") + ";" + DateTime.Now.ToString("dd/MM/yyyy") +";"+DateTime.Now.ToString("HH:MM:ss") + ";" + HttpContext.Current.Request.UserHostAddress + ";" + login+";"+tipo);
                sw.Close();
            }
        }
    }
}